package com.mvc.demo.interceptor;

import com.mvc.demo.controller.TestExportPdfController;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 控制器通知类
 * @author H
 * @date 2023/1/8
 */
// 注意：经过测试，RestControllerAdvice注解中使用basePackages和basePackageClasses参数都不好使
@RestControllerAdvice(basePackageClasses = TestExportPdfController.class, annotations = RestController.class)
public class MyControllerAdvice {
    /**
     * 在控制器参数转换前被执行的代码。这里的WebDataBinder参数对象是SpringMVC会自动生成的参数
     * 绑定格式化、参数转换规则和增加验证器等
     *
     * @param binder
     */
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        // 自定义日期编辑器，限定格式为yyyy-Mm-dd，且参数不允许为空,参数不再需要注解@DateTimeFormat,boolean参数表示是否允许为空
        CustomDateEditor dateEditor = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false);
        // 注册自定义日期编辑器
        binder.registerCustomEditor(Date.class, dateEditor);
    }

    /**
     * 在执行控制器之前先执行，可以初始化数据模型。这里增加了一个参数，可以在控制器方法中获取它
     *
     * @param model
     */
    @ModelAttribute
    public void projectModel(Model model) {
        model.addAttribute("projectName", "这是projectModel");
    }


}
